<?php

use Common\AllUser;
use Common\APP;
use Common\Config;
use Common\Decorator\ColorDecorator;
use Common\Decorator\Decorator;
use Common\Decorator\FontSizeDecorator;
use Common\Factory;
use Common\Generator\EventGenerator;
use Common\Interfaces\UserStrategy;
use Common\Objects;
use Common\Observer\Observer;
use Common\Proxy\UserProxy;
use Common\Register;
use Common\Strategy\FemaleUserStrategy;
use Common\Strategy\MaleUserStrategy;
use Common\User;

define('BASEDIR', str_replace('\\', '/', __DIR__));
include BASEDIR . '/Common/Loader.php';
spl_autoload_register('\\Common\Loader::autoload');

// $test = new Test\Test();
// $test->index();

// $db = Factory::createDatabase();
// Register::set('db1', $db);


// class Page
// {

//     protected $strategy;

//     public function index()
//     {
//         echo "AD:";
//         $this->strategy->showAD();
//         echo "<br>";
//         echo "Category:";
//         $this->strategy->showCategory();
//         echo "<br>";
//     }

//     public function setStrategy(UserStrategy $strategy)
//     {
//         $this->strategy = $strategy;
//     }
// }


// $page = new Page();
// $page->setStrategy(new MaleUserStrategy());
// $page->index();


// class Page
// {

//     public function index()
//     {   
//         // 使用工厂方法使对象实例化
//         $user = Factory::getUser(1);
//         var_dump($user);
//         $user->name = "李四";
//     }
//     public function test()
//     {
//         $user = Factory::getUser(1);
//         var_dump($user);
//         $user->age = "36";
//     }
// }

// $page = new Page();
// $page->index();
// $page->test();




// class Event extends EventGenerator
// {
//     public function trigger()
//     {
//         echo "Event<br>";

//         $str = "JSON";
//         $array_str = [
//             'sms'=>[
//                 'a'=>'我要发送短信'
//             ],
//             'admin'=>[
//                 'user'=>[
//                     'name'=>"张三"
//                 ],
//                 'role'=>'大富翁'
//             ],
//             'sql'=>[
//                 'update'=>[
//                     'sql' => 'update xx set a=1 where b=2'
//                 ]
//             ]

//         ];
//         $this->notify($array_str);
//     }
// }

// class SMS implements Observer
// {
//     public function update($event_info = null)
//     {
//         var_dump($event_info['sms']);
//         echo "<br>";
//     }
// }

// class Admin implements Observer
// {
//     public function update($event_info = null)
//     {
//         var_dump($event_info['admin']);
//         echo "<br>";
//     }
// }

// class SQL implements Observer
// {
//     public function update($event_info = null)
//     {
//         var_dump($event_info['sql']);
//         echo "<br>";
//     }
// }

// $event = new Event();
// $event->addObserver(new SMS());
// $event->addObserver(new Admin());
// $event->addObserver(new SQL());
// $event->trigger();




// $decorator = new Decorator();
// $decorator->addIDecorator(new ColorDecorator());
// $decorator->addIDecorator(new FontSizeDecorator('22px'));
// $decorator->index();



// 迭代器模式的使用
// $alluser = new AllUser();

// foreach($alluser as $user){
//     var_dump($user);
//     $user->serail_no = rand(10000,99999);
//     echo "<br>";
// }


// $app = APP::getInstance();
// var_dump($app->config['database']);
// echo "<pre>";
// // 代理模式
// $proxy = new UserProxy();

// $res = $proxy->getUserName(2);
// var_dump($res);
// $res = $proxy->setUserName(2, '王五');
// var_dump($res);

// MVC 框架解析
App::getInstance()->run();